class Solution {
public:
    string convert(string s, int numRows) {
        if(numRows == 1)
            return s;

        string str;
        int n = s.size(), d = 2 * numRows - 2;  // d 是等差
        
        // 先处理第一行
        for(int i = 0; i < n; i += d)
            str += s[i];

        // 再处理中间的 k 行
        for(int k = 1; k < numRows - 1; k++)    // 枚举每一行
        {
            for(int x = k, y = d - k; x < n || y < n; x += d, y += d)
            {
                if(x < n) str += s[x];
                if(y < n) str += s[y];
            }
        }
        
        // 最后处理最后一行
        for(int i = numRows - 1; i < n; i += d)
            str += s[i];

        return str;
    }
};